//package com.common.groovy.action;
//
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.common.constanct.CommonUtils;
//import com.common.dao.LowCodeDao;
//import com.common.exception.ErrorException;
//import com.common.groovy.helper.GroovyHelper;
//import com.common.groovy.model.ActionModel;
//import com.common.groovy.model.DataModel;
//import com.github.pagehelper.Page;
//import com.github.pagehelper.PageHelper;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//import org.springframework.util.StringUtils;
//
//import java.util.List;
//import java.util.Map;
//import java.util.Optional;
//
//@Component("SimpleCustom")
//public class SimpleCustomAction implements IAction<JSONObject, Object> {
//
//    @Autowired
//    private GroovyHelper groovyHelper;
//
//    @Autowired
//    private LowCodeDao lowCodeDao;
//
//    private Boolean isPage;//是否分页
//
//    private Integer pageNo;
//
//    private Integer pageSize;
//
//    private String pageNoParamName;
//
//    private String pageSizeParamName;
//
//    @Override
//    public Object execute(ActionModel actionDetail, DataModel data, JSONObject params) {
//        //需要判断到底是增删改查的哪一种
//        Object result = null;
//        String beforeShell = actionDetail.getBefore();
//        String sql = actionDetail.getDetail().getSaveScript();
//        String afterShell = actionDetail.getAfter();
//        if (StringUtils.hasText(beforeShell)) {
//            groovyHelper.execute(beforeShell, params);
//        }
//        if (StringUtils.hasText(sql)) {
//            String id = params.getStr("id");
//            if (!StringUtils.hasText(id)) {
//                //ID为空的话，默认赋值uuid
//                params.set("id", CommonUtils.getUUID().replace("-", ""));
//            }
//            Optional<ActionModel.Detail> detailOptional = Optional.of(actionDetail.getDetail());
//            if (detailOptional.isPresent()){
//                isPage = detailOptional.get().getPage();//是否分页
//                if (isPage) {
//                    ActionModel.PageParamName pageParamName = actionDetail.getDetail().getPageParamName();
//                    pageNoParamName = pageParamName.getPageNo();
//                    pageSizeParamName = pageParamName.getPageSize();
//                    pageNo = params.getInt(pageNoParamName, 1);
//                    pageSize = params.getInt(pageSizeParamName, 10);
//                }
//            }
//            result = executeSql(sql, params);
//        }
//        if (StringUtils.hasText(afterShell)) {
//            JSONObject afterParams = JSONUtil.createObj();
//            afterParams.set("request", params);
//            afterParams.set("response", result);
//            groovyHelper.execute(afterShell, afterParams);
//        }
//        return result;
//    }
//
//    @Override
//    public Object processSql(String sql) {
//        String type = sql.substring(0, sql.indexOf(" ")).toUpperCase();
//        if (type.startsWith("INSERT")) {
//            Integer rows = lowCodeDao.simpleInsertExecute(sql);
//           JSONObject result = JSONUtil.createObj();
//            result.set("rows", rows);
//            return result;
//        }else if (type.startsWith("UPDATE")){
//            Integer rows = lowCodeDao.simpleUpdateExecute(sql);
//            JSONObject result = JSONUtil.createObj();
//            result.set("rows", rows);
//            return result;
//        }else if(type.startsWith("DELETE")){
//            Integer rows = lowCodeDao.simpleDeleteExecute(sql);
//            JSONObject result = JSONUtil.createObj();
//            result.set("rows", rows);
//            return result;
//        }else if (type.startsWith("SELECT")){
//            if (isPage) {
//                PageHelper.startPage(pageNo, pageSize);
//            }
//            List<Map<String, Object>> list = lowCodeDao.simpleQueryExecute(sql);
//            if (isPage) {
//                Page page = (Page) list;
//                JSONObject result = JSONUtil.createObj();
//                result.set(pageNoParamName, pageNo);
//                result.set(pageSizeParamName, pageSize);
//                result.set("rows", list);
//                result.set("count", page.getTotal());
//                return result;
//            } else {
//                if (CollectionUtils.isEmpty(list)) {
//                    return JSONUtil.createArray();
//                }
//                return JSONUtil.parseArray(list);
//            }
//        }else {
//            throw new ErrorException("自定义脚本类型无法查找");
//        }
//    }
//}
